package com.shujia.data_safe;

public class SaleTicket implements Runnable {
    private int num;


    public static void main(String[] args) {
        SaleTicket st = new SaleTicket();
        st.num = 100;

        for (int i = 1; i <= 5; i++) {
            new Thread(st, "窗口" + i).start();
        }
    }


    @Override
    public void run() {
        // 5个线程同时判断while条件, 都返回true
        while (num > 0) {
            // 5个线程都执行到这里
            // 下面的同步代码, 只能有一个线程可以继续执行
            // 4个线程在外面阻塞等待执行
            synchronized (this) {
                if (num > 0) {
                    // 进来了一个线程
                    System.out.println(Thread.currentThread().getName() + ":售出第" + num + "张票");
                    num--;
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }// 执行完毕, 释放锁
        }

    }
}
